#include "todomanager.h"

TodoManager::TodoManager()
{
}

void TodoManager::addTodo(TodoItemPtr item)
{

    if( item->code == -1 ) {
        item->code = getNextCode();
        resetMaxCode(item->code);
        _todoMap.insert( item->code, item );
    } else {
        _todoMap[item->code] = item;
    }

}

TodoItemPtr TodoManager::getTodo(int code)
{
    TodoItemPtr ptr;

    auto it = _todoMap.find(code);
    if( it != _todoMap.end() ) {
        ptr = it.value();
    }

    return ptr;
}

void TodoManager::resetMaxCode(int code)
{
    _maxNumber = code;
}

int TodoManager::getMaxCode()
{
    if( _maxNumber > 0 )
        return _maxNumber;

    for(const TodoItemPtr item : _todoMap) {
        if( _maxNumber < item->code ) {
            _maxNumber = item->code;
        }
    }

    return _maxNumber;
}

int TodoManager::getNextCode()
{
    return getMaxCode() + 1;
}

const TodoManager::TodoMap &TodoManager::getTodoMap() const
{
    return _todoMap;
}

bool TodoManager::delTodo(int code)
{
    TodoItemPtr item = getTodo(code);
    if( item.isNull() ) return false;

    _todoMap.remove(code);

    return true;
}

void TodoManager::clear()
{
    _todoMap.clear();
}
